package dk.nineconsult.jmoller.mapr.parser.antlr.internal; 

import java.io.InputStream;
import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.xtext.parsetree.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import org.eclipse.xtext.conversion.ValueConverterException;
import dk.nineconsult.jmoller.mapr.services.MaprGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("all")
public class InternalMaprParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_STRING", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'module'", "'.'", "'complete'", "'partial'", "'one-way'", "'bidi'", "'mapper'", "'between'", "'and'", "'{'", "';'", "'}'", "'map'", "'<=>'", "'left'", "'='", "'right'", "'composite'", "'ignore'"
    };
    public static final int RULE_ID=4;
    public static final int RULE_STRING=5;
    public static final int RULE_ANY_OTHER=10;
    public static final int RULE_INT=6;
    public static final int RULE_WS=9;
    public static final int RULE_SL_COMMENT=8;
    public static final int EOF=-1;
    public static final int RULE_ML_COMMENT=7;

        public InternalMaprParser(TokenStream input) {
            super(input);
        }
        

    public String[] getTokenNames() { return tokenNames; }
    public String getGrammarFileName() { return "../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g"; }



     	private MaprGrammarAccess grammarAccess;
     	
        public InternalMaprParser(TokenStream input, IAstFactory factory, MaprGrammarAccess grammarAccess) {
            this(input);
            this.factory = factory;
            registerRules(grammarAccess.getGrammar());
            this.grammarAccess = grammarAccess;
        }
        
        @Override
        protected InputStream getTokenFile() {
        	ClassLoader classLoader = getClass().getClassLoader();
        	return classLoader.getResourceAsStream("dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.tokens");
        }
        
        @Override
        protected String getFirstRuleName() {
        	return "Model";	
       	}
       	
       	@Override
       	protected MaprGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}



    // $ANTLR start entryRuleModel
    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:77:1: entryRuleModel returns [EObject current=null] : iv_ruleModel= ruleModel EOF ;
    public final EObject entryRuleModel() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleModel = null;


        try {
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:78:2: (iv_ruleModel= ruleModel EOF )
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:79:2: iv_ruleModel= ruleModel EOF
            {
             currentNode = createCompositeNode(grammarAccess.getModelRule(), currentNode); 
            pushFollow(FOLLOW_ruleModel_in_entryRuleModel75);
            iv_ruleModel=ruleModel();
            _fsp--;

             current =iv_ruleModel; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleModel85); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleModel


    // $ANTLR start ruleModel
    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:86:1: ruleModel returns [EObject current=null] : ( (lv_modules_0_0= ruleMappingModule ) )* ;
    public final EObject ruleModel() throws RecognitionException {
        EObject current = null;

        EObject lv_modules_0_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:91:6: ( ( (lv_modules_0_0= ruleMappingModule ) )* )
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:92:1: ( (lv_modules_0_0= ruleMappingModule ) )*
            {
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:92:1: ( (lv_modules_0_0= ruleMappingModule ) )*
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

                if ( (LA1_0==11) ) {
                    alt1=1;
                }


                switch (alt1) {
            	case 1 :
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:93:1: (lv_modules_0_0= ruleMappingModule )
            	    {
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:93:1: (lv_modules_0_0= ruleMappingModule )
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:94:3: lv_modules_0_0= ruleMappingModule
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getModelAccess().getModulesMappingModuleParserRuleCall_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleMappingModule_in_ruleModel130);
            	    lv_modules_0_0=ruleMappingModule();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getModelRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"modules",
            	    	        		lv_modules_0_0, 
            	    	        		"MappingModule", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop1;
                }
            } while (true);


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleModel


    // $ANTLR start entryRuleMappingModule
    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:124:1: entryRuleMappingModule returns [EObject current=null] : iv_ruleMappingModule= ruleMappingModule EOF ;
    public final EObject entryRuleMappingModule() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMappingModule = null;


        try {
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:125:2: (iv_ruleMappingModule= ruleMappingModule EOF )
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:126:2: iv_ruleMappingModule= ruleMappingModule EOF
            {
             currentNode = createCompositeNode(grammarAccess.getMappingModuleRule(), currentNode); 
            pushFollow(FOLLOW_ruleMappingModule_in_entryRuleMappingModule166);
            iv_ruleMappingModule=ruleMappingModule();
            _fsp--;

             current =iv_ruleMappingModule; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleMappingModule176); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleMappingModule


    // $ANTLR start ruleMappingModule
    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:133:1: ruleMappingModule returns [EObject current=null] : ( () 'module' ( (lv_moduleName_2_0= ruleQID ) ) ( (lv_mappers_3_0= ruleMapping ) )* ) ;
    public final EObject ruleMappingModule() throws RecognitionException {
        EObject current = null;

        AntlrDatatypeRuleToken lv_moduleName_2_0 = null;

        EObject lv_mappers_3_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:138:6: ( ( () 'module' ( (lv_moduleName_2_0= ruleQID ) ) ( (lv_mappers_3_0= ruleMapping ) )* ) )
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:139:1: ( () 'module' ( (lv_moduleName_2_0= ruleQID ) ) ( (lv_mappers_3_0= ruleMapping ) )* )
            {
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:139:1: ( () 'module' ( (lv_moduleName_2_0= ruleQID ) ) ( (lv_mappers_3_0= ruleMapping ) )* )
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:139:2: () 'module' ( (lv_moduleName_2_0= ruleQID ) ) ( (lv_mappers_3_0= ruleMapping ) )*
            {
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:139:2: ()
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:140:5: 
            {
             
                    temp=factory.create(grammarAccess.getMappingModuleAccess().getMappingModuleAction_0().getType().getClassifier());
                    current = temp; 
                    temp = null;
                    CompositeNode newNode = createCompositeNode(grammarAccess.getMappingModuleAccess().getMappingModuleAction_0(), currentNode.getParent());
                newNode.getChildren().add(currentNode);
                moveLookaheadInfo(currentNode, newNode);
                currentNode = newNode; 
                    associateNodeWithAstElement(currentNode, current); 
                

            }

            match(input,11,FOLLOW_11_in_ruleMappingModule220); 

                    createLeafNode(grammarAccess.getMappingModuleAccess().getModuleKeyword_1(), null); 
                
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:154:1: ( (lv_moduleName_2_0= ruleQID ) )
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:155:1: (lv_moduleName_2_0= ruleQID )
            {
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:155:1: (lv_moduleName_2_0= ruleQID )
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:156:3: lv_moduleName_2_0= ruleQID
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getMappingModuleAccess().getModuleNameQIDParserRuleCall_2_0(), currentNode); 
            	    
            pushFollow(FOLLOW_ruleQID_in_ruleMappingModule241);
            lv_moduleName_2_0=ruleQID();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getMappingModuleRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"moduleName",
            	        		lv_moduleName_2_0, 
            	        		"QID", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:178:2: ( (lv_mappers_3_0= ruleMapping ) )*
            loop2:
            do {
                int alt2=2;
                int LA2_0 = input.LA(1);

                if ( LA2_0 >=13 && LA2_0<=14 && getUnorderedGroupHelper().canSelect(grammarAccess.getMappingAccess().getUnorderedGroup_0(), 0) ) {
                    alt2=1;
                }
                else if ( LA2_0 >=15 && LA2_0<=16 && getUnorderedGroupHelper().canSelect(grammarAccess.getMappingAccess().getUnorderedGroup_0(), 1) ) {
                    alt2=1;
                }


                switch (alt2) {
            	case 1 :
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:179:1: (lv_mappers_3_0= ruleMapping )
            	    {
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:179:1: (lv_mappers_3_0= ruleMapping )
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:180:3: lv_mappers_3_0= ruleMapping
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getMappingModuleAccess().getMappersMappingParserRuleCall_3_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleMapping_in_ruleMappingModule262);
            	    lv_mappers_3_0=ruleMapping();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getMappingModuleRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"mappers",
            	    	        		lv_mappers_3_0, 
            	    	        		"Mapping", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop2;
                }
            } while (true);


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleMappingModule


    // $ANTLR start entryRuleQID
    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:210:1: entryRuleQID returns [String current=null] : iv_ruleQID= ruleQID EOF ;
    public final String entryRuleQID() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleQID = null;


        try {
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:211:2: (iv_ruleQID= ruleQID EOF )
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:212:2: iv_ruleQID= ruleQID EOF
            {
             currentNode = createCompositeNode(grammarAccess.getQIDRule(), currentNode); 
            pushFollow(FOLLOW_ruleQID_in_entryRuleQID300);
            iv_ruleQID=ruleQID();
            _fsp--;

             current =iv_ruleQID.getText(); 
            match(input,EOF,FOLLOW_EOF_in_entryRuleQID311); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleQID


    // $ANTLR start ruleQID
    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:219:1: ruleQID returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* ) ;
    public final AntlrDatatypeRuleToken ruleQID() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_ID_0=null;
        Token kw=null;
        Token this_ID_2=null;

         setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:224:6: ( (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* ) )
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:225:1: (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* )
            {
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:225:1: (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* )
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:225:6: this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )*
            {
            this_ID_0=(Token)input.LT(1);
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleQID351); 

            		current.merge(this_ID_0);
                
             
                createLeafNode(grammarAccess.getQIDAccess().getIDTerminalRuleCall_0(), null); 
                
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:232:1: (kw= '.' this_ID_2= RULE_ID )*
            loop3:
            do {
                int alt3=2;
                int LA3_0 = input.LA(1);

                if ( (LA3_0==12) ) {
                    alt3=1;
                }


                switch (alt3) {
            	case 1 :
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:233:2: kw= '.' this_ID_2= RULE_ID
            	    {
            	    kw=(Token)input.LT(1);
            	    match(input,12,FOLLOW_12_in_ruleQID370); 

            	            current.merge(kw);
            	            createLeafNode(grammarAccess.getQIDAccess().getFullStopKeyword_1_0(), null); 
            	        
            	    this_ID_2=(Token)input.LT(1);
            	    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleQID385); 

            	    		current.merge(this_ID_2);
            	        
            	     
            	        createLeafNode(grammarAccess.getQIDAccess().getIDTerminalRuleCall_1_1(), null); 
            	        

            	    }
            	    break;

            	default :
            	    break loop3;
                }
            } while (true);


            }


            }

             resetLookahead(); 
            	    lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleQID


    // $ANTLR start entryRuleMapping
    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:253:1: entryRuleMapping returns [EObject current=null] : iv_ruleMapping= ruleMapping EOF ;
    public final EObject entryRuleMapping() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMapping = null;


        try {
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:254:2: (iv_ruleMapping= ruleMapping EOF )
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:255:2: iv_ruleMapping= ruleMapping EOF
            {
             currentNode = createCompositeNode(grammarAccess.getMappingRule(), currentNode); 
            pushFollow(FOLLOW_ruleMapping_in_entryRuleMapping432);
            iv_ruleMapping=ruleMapping();
            _fsp--;

             current =iv_ruleMapping; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleMapping442); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleMapping


    // $ANTLR start ruleMapping
    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:262:1: ruleMapping returns [EObject current=null] : ( ( ( ( ( ({...}? => ( ( ( (lv_coverage_1_1= 'complete' | lv_coverage_1_2= 'partial' ) ) ) ) ) | ({...}? => ( ( ( (lv_direction_2_1= 'one-way' | lv_direction_2_2= 'bidi' ) ) ) ) ) )+ {...}?) ) ) 'mapper' ( (lv_name_4_0= RULE_STRING ) )? 'between' ( ( ruleQID ) ) 'and' ( ( ruleQID ) ) '{' ( ( (lv_mappedFeatures_10_0= ruleFeatureMap ) ) ( ';' )? )* '}' ) ;
    public final EObject ruleMapping() throws RecognitionException {
        EObject current = null;

        Token lv_coverage_1_1=null;
        Token lv_coverage_1_2=null;
        Token lv_direction_2_1=null;
        Token lv_direction_2_2=null;
        Token lv_name_4_0=null;
        EObject lv_mappedFeatures_10_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:267:6: ( ( ( ( ( ( ({...}? => ( ( ( (lv_coverage_1_1= 'complete' | lv_coverage_1_2= 'partial' ) ) ) ) ) | ({...}? => ( ( ( (lv_direction_2_1= 'one-way' | lv_direction_2_2= 'bidi' ) ) ) ) ) )+ {...}?) ) ) 'mapper' ( (lv_name_4_0= RULE_STRING ) )? 'between' ( ( ruleQID ) ) 'and' ( ( ruleQID ) ) '{' ( ( (lv_mappedFeatures_10_0= ruleFeatureMap ) ) ( ';' )? )* '}' ) )
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:268:1: ( ( ( ( ( ({...}? => ( ( ( (lv_coverage_1_1= 'complete' | lv_coverage_1_2= 'partial' ) ) ) ) ) | ({...}? => ( ( ( (lv_direction_2_1= 'one-way' | lv_direction_2_2= 'bidi' ) ) ) ) ) )+ {...}?) ) ) 'mapper' ( (lv_name_4_0= RULE_STRING ) )? 'between' ( ( ruleQID ) ) 'and' ( ( ruleQID ) ) '{' ( ( (lv_mappedFeatures_10_0= ruleFeatureMap ) ) ( ';' )? )* '}' )
            {
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:268:1: ( ( ( ( ( ({...}? => ( ( ( (lv_coverage_1_1= 'complete' | lv_coverage_1_2= 'partial' ) ) ) ) ) | ({...}? => ( ( ( (lv_direction_2_1= 'one-way' | lv_direction_2_2= 'bidi' ) ) ) ) ) )+ {...}?) ) ) 'mapper' ( (lv_name_4_0= RULE_STRING ) )? 'between' ( ( ruleQID ) ) 'and' ( ( ruleQID ) ) '{' ( ( (lv_mappedFeatures_10_0= ruleFeatureMap ) ) ( ';' )? )* '}' )
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:268:2: ( ( ( ( ({...}? => ( ( ( (lv_coverage_1_1= 'complete' | lv_coverage_1_2= 'partial' ) ) ) ) ) | ({...}? => ( ( ( (lv_direction_2_1= 'one-way' | lv_direction_2_2= 'bidi' ) ) ) ) ) )+ {...}?) ) ) 'mapper' ( (lv_name_4_0= RULE_STRING ) )? 'between' ( ( ruleQID ) ) 'and' ( ( ruleQID ) ) '{' ( ( (lv_mappedFeatures_10_0= ruleFeatureMap ) ) ( ';' )? )* '}'
            {
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:268:2: ( ( ( ( ({...}? => ( ( ( (lv_coverage_1_1= 'complete' | lv_coverage_1_2= 'partial' ) ) ) ) ) | ({...}? => ( ( ( (lv_direction_2_1= 'one-way' | lv_direction_2_2= 'bidi' ) ) ) ) ) )+ {...}?) ) )
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:270:1: ( ( ( ({...}? => ( ( ( (lv_coverage_1_1= 'complete' | lv_coverage_1_2= 'partial' ) ) ) ) ) | ({...}? => ( ( ( (lv_direction_2_1= 'one-way' | lv_direction_2_2= 'bidi' ) ) ) ) ) )+ {...}?) )
            {
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:270:1: ( ( ( ({...}? => ( ( ( (lv_coverage_1_1= 'complete' | lv_coverage_1_2= 'partial' ) ) ) ) ) | ({...}? => ( ( ( (lv_direction_2_1= 'one-way' | lv_direction_2_2= 'bidi' ) ) ) ) ) )+ {...}?) )
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:271:2: ( ( ({...}? => ( ( ( (lv_coverage_1_1= 'complete' | lv_coverage_1_2= 'partial' ) ) ) ) ) | ({...}? => ( ( ( (lv_direction_2_1= 'one-way' | lv_direction_2_2= 'bidi' ) ) ) ) ) )+ {...}?)
            {
             
            	  getUnorderedGroupHelper().enter(grammarAccess.getMappingAccess().getUnorderedGroup_0());
            	
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:274:2: ( ( ({...}? => ( ( ( (lv_coverage_1_1= 'complete' | lv_coverage_1_2= 'partial' ) ) ) ) ) | ({...}? => ( ( ( (lv_direction_2_1= 'one-way' | lv_direction_2_2= 'bidi' ) ) ) ) ) )+ {...}?)
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:275:3: ( ({...}? => ( ( ( (lv_coverage_1_1= 'complete' | lv_coverage_1_2= 'partial' ) ) ) ) ) | ({...}? => ( ( ( (lv_direction_2_1= 'one-way' | lv_direction_2_2= 'bidi' ) ) ) ) ) )+ {...}?
            {
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:275:3: ( ({...}? => ( ( ( (lv_coverage_1_1= 'complete' | lv_coverage_1_2= 'partial' ) ) ) ) ) | ({...}? => ( ( ( (lv_direction_2_1= 'one-way' | lv_direction_2_2= 'bidi' ) ) ) ) ) )+
            int cnt6=0;
            loop6:
            do {
                int alt6=3;
                int LA6_0 = input.LA(1);

                if ( LA6_0 >=13 && LA6_0<=14 && getUnorderedGroupHelper().canSelect(grammarAccess.getMappingAccess().getUnorderedGroup_0(), 0) ) {
                    alt6=1;
                }
                else if ( LA6_0 >=15 && LA6_0<=16 && getUnorderedGroupHelper().canSelect(grammarAccess.getMappingAccess().getUnorderedGroup_0(), 1) ) {
                    alt6=2;
                }


                switch (alt6) {
            	case 1 :
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:277:4: ({...}? => ( ( ( (lv_coverage_1_1= 'complete' | lv_coverage_1_2= 'partial' ) ) ) ) )
            	    {
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:277:4: ({...}? => ( ( ( (lv_coverage_1_1= 'complete' | lv_coverage_1_2= 'partial' ) ) ) ) )
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:278:5: {...}? => ( ( ( (lv_coverage_1_1= 'complete' | lv_coverage_1_2= 'partial' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getMappingAccess().getUnorderedGroup_0(), 0) ) {
            	        throw new FailedPredicateException(input, "ruleMapping", "getUnorderedGroupHelper().canSelect(grammarAccess.getMappingAccess().getUnorderedGroup_0(), 0)");
            	    }
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:278:104: ( ( ( (lv_coverage_1_1= 'complete' | lv_coverage_1_2= 'partial' ) ) ) )
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:279:6: ( ( (lv_coverage_1_1= 'complete' | lv_coverage_1_2= 'partial' ) ) )
            	    {
            	     
            	    	 				  getUnorderedGroupHelper().select(grammarAccess.getMappingAccess().getUnorderedGroup_0(), 0);
            	    	 				
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:282:6: ( ( (lv_coverage_1_1= 'complete' | lv_coverage_1_2= 'partial' ) ) )
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:283:1: ( (lv_coverage_1_1= 'complete' | lv_coverage_1_2= 'partial' ) )
            	    {
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:283:1: ( (lv_coverage_1_1= 'complete' | lv_coverage_1_2= 'partial' ) )
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:284:1: (lv_coverage_1_1= 'complete' | lv_coverage_1_2= 'partial' )
            	    {
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:284:1: (lv_coverage_1_1= 'complete' | lv_coverage_1_2= 'partial' )
            	    int alt4=2;
            	    int LA4_0 = input.LA(1);

            	    if ( (LA4_0==13) ) {
            	        alt4=1;
            	    }
            	    else if ( (LA4_0==14) ) {
            	        alt4=2;
            	    }
            	    else {
            	        NoViableAltException nvae =
            	            new NoViableAltException("284:1: (lv_coverage_1_1= 'complete' | lv_coverage_1_2= 'partial' )", 4, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt4) {
            	        case 1 :
            	            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:285:3: lv_coverage_1_1= 'complete'
            	            {
            	            lv_coverage_1_1=(Token)input.LT(1);
            	            match(input,13,FOLLOW_13_in_ruleMapping529); 

            	                    createLeafNode(grammarAccess.getMappingAccess().getCoverageCompleteKeyword_0_0_0_0(), "coverage"); 
            	                

            	            	        if (current==null) {
            	            	            current = factory.create(grammarAccess.getMappingRule().getType().getClassifier());
            	            	            associateNodeWithAstElement(currentNode, current);
            	            	        }
            	            	        
            	            	        try {
            	            	       		set(current, "coverage", lv_coverage_1_1, null, lastConsumedNode);
            	            	        } catch (ValueConverterException vce) {
            	            				handleValueConverterException(vce);
            	            	        }
            	            	    

            	            }
            	            break;
            	        case 2 :
            	            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:303:8: lv_coverage_1_2= 'partial'
            	            {
            	            lv_coverage_1_2=(Token)input.LT(1);
            	            match(input,14,FOLLOW_14_in_ruleMapping558); 

            	                    createLeafNode(grammarAccess.getMappingAccess().getCoveragePartialKeyword_0_0_0_1(), "coverage"); 
            	                

            	            	        if (current==null) {
            	            	            current = factory.create(grammarAccess.getMappingRule().getType().getClassifier());
            	            	            associateNodeWithAstElement(currentNode, current);
            	            	        }
            	            	        
            	            	        try {
            	            	       		set(current, "coverage", lv_coverage_1_2, null, lastConsumedNode);
            	            	        } catch (ValueConverterException vce) {
            	            				handleValueConverterException(vce);
            	            	        }
            	            	    

            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getMappingAccess().getUnorderedGroup_0());
            	    	 				

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:331:4: ({...}? => ( ( ( (lv_direction_2_1= 'one-way' | lv_direction_2_2= 'bidi' ) ) ) ) )
            	    {
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:331:4: ({...}? => ( ( ( (lv_direction_2_1= 'one-way' | lv_direction_2_2= 'bidi' ) ) ) ) )
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:332:5: {...}? => ( ( ( (lv_direction_2_1= 'one-way' | lv_direction_2_2= 'bidi' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getMappingAccess().getUnorderedGroup_0(), 1) ) {
            	        throw new FailedPredicateException(input, "ruleMapping", "getUnorderedGroupHelper().canSelect(grammarAccess.getMappingAccess().getUnorderedGroup_0(), 1)");
            	    }
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:332:104: ( ( ( (lv_direction_2_1= 'one-way' | lv_direction_2_2= 'bidi' ) ) ) )
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:333:6: ( ( (lv_direction_2_1= 'one-way' | lv_direction_2_2= 'bidi' ) ) )
            	    {
            	     
            	    	 				  getUnorderedGroupHelper().select(grammarAccess.getMappingAccess().getUnorderedGroup_0(), 1);
            	    	 				
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:336:6: ( ( (lv_direction_2_1= 'one-way' | lv_direction_2_2= 'bidi' ) ) )
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:337:1: ( (lv_direction_2_1= 'one-way' | lv_direction_2_2= 'bidi' ) )
            	    {
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:337:1: ( (lv_direction_2_1= 'one-way' | lv_direction_2_2= 'bidi' ) )
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:338:1: (lv_direction_2_1= 'one-way' | lv_direction_2_2= 'bidi' )
            	    {
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:338:1: (lv_direction_2_1= 'one-way' | lv_direction_2_2= 'bidi' )
            	    int alt5=2;
            	    int LA5_0 = input.LA(1);

            	    if ( (LA5_0==15) ) {
            	        alt5=1;
            	    }
            	    else if ( (LA5_0==16) ) {
            	        alt5=2;
            	    }
            	    else {
            	        NoViableAltException nvae =
            	            new NoViableAltException("338:1: (lv_direction_2_1= 'one-way' | lv_direction_2_2= 'bidi' )", 5, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt5) {
            	        case 1 :
            	            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:339:3: lv_direction_2_1= 'one-way'
            	            {
            	            lv_direction_2_1=(Token)input.LT(1);
            	            match(input,15,FOLLOW_15_in_ruleMapping644); 

            	                    createLeafNode(grammarAccess.getMappingAccess().getDirectionOneWayKeyword_0_1_0_0(), "direction"); 
            	                

            	            	        if (current==null) {
            	            	            current = factory.create(grammarAccess.getMappingRule().getType().getClassifier());
            	            	            associateNodeWithAstElement(currentNode, current);
            	            	        }
            	            	        
            	            	        try {
            	            	       		set(current, "direction", lv_direction_2_1, null, lastConsumedNode);
            	            	        } catch (ValueConverterException vce) {
            	            				handleValueConverterException(vce);
            	            	        }
            	            	    

            	            }
            	            break;
            	        case 2 :
            	            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:357:8: lv_direction_2_2= 'bidi'
            	            {
            	            lv_direction_2_2=(Token)input.LT(1);
            	            match(input,16,FOLLOW_16_in_ruleMapping673); 

            	                    createLeafNode(grammarAccess.getMappingAccess().getDirectionBidiKeyword_0_1_0_1(), "direction"); 
            	                

            	            	        if (current==null) {
            	            	            current = factory.create(grammarAccess.getMappingRule().getType().getClassifier());
            	            	            associateNodeWithAstElement(currentNode, current);
            	            	        }
            	            	        
            	            	        try {
            	            	       		set(current, "direction", lv_direction_2_2, null, lastConsumedNode);
            	            	        } catch (ValueConverterException vce) {
            	            				handleValueConverterException(vce);
            	            	        }
            	            	    

            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getMappingAccess().getUnorderedGroup_0());
            	    	 				

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    if ( cnt6 >= 1 ) break loop6;
                        EarlyExitException eee =
                            new EarlyExitException(6, input);
                        throw eee;
                }
                cnt6++;
            } while (true);

            if ( ! getUnorderedGroupHelper().canLeave(grammarAccess.getMappingAccess().getUnorderedGroup_0()) ) {
                throw new FailedPredicateException(input, "ruleMapping", "getUnorderedGroupHelper().canLeave(grammarAccess.getMappingAccess().getUnorderedGroup_0())");
            }

            }


            }

             
            	  getUnorderedGroupHelper().leave(grammarAccess.getMappingAccess().getUnorderedGroup_0());
            	

            }

            match(input,17,FOLLOW_17_in_ruleMapping744); 

                    createLeafNode(grammarAccess.getMappingAccess().getMapperKeyword_1(), null); 
                
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:397:1: ( (lv_name_4_0= RULE_STRING ) )?
            int alt7=2;
            int LA7_0 = input.LA(1);

            if ( (LA7_0==RULE_STRING) ) {
                alt7=1;
            }
            switch (alt7) {
                case 1 :
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:398:1: (lv_name_4_0= RULE_STRING )
                    {
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:398:1: (lv_name_4_0= RULE_STRING )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:399:3: lv_name_4_0= RULE_STRING
                    {
                    lv_name_4_0=(Token)input.LT(1);
                    match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleMapping761); 

                    			createLeafNode(grammarAccess.getMappingAccess().getNameSTRINGTerminalRuleCall_2_0(), "name"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getMappingRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"name",
                    	        		lv_name_4_0, 
                    	        		"STRING", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }
                    break;

            }

            match(input,18,FOLLOW_18_in_ruleMapping777); 

                    createLeafNode(grammarAccess.getMappingAccess().getBetweenKeyword_3(), null); 
                
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:425:1: ( ( ruleQID ) )
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:426:1: ( ruleQID )
            {
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:426:1: ( ruleQID )
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:427:3: ruleQID
            {

            			if (current==null) {
            	            current = factory.create(grammarAccess.getMappingRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
                    
             
            	        currentNode=createCompositeNode(grammarAccess.getMappingAccess().getLeftClassJvmTypeCrossReference_4_0(), currentNode); 
            	    
            pushFollow(FOLLOW_ruleQID_in_ruleMapping800);
            ruleQID();
            _fsp--;

             
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            match(input,19,FOLLOW_19_in_ruleMapping810); 

                    createLeafNode(grammarAccess.getMappingAccess().getAndKeyword_5(), null); 
                
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:445:1: ( ( ruleQID ) )
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:446:1: ( ruleQID )
            {
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:446:1: ( ruleQID )
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:447:3: ruleQID
            {

            			if (current==null) {
            	            current = factory.create(grammarAccess.getMappingRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
                    
             
            	        currentNode=createCompositeNode(grammarAccess.getMappingAccess().getRightClassJvmTypeCrossReference_6_0(), currentNode); 
            	    
            pushFollow(FOLLOW_ruleQID_in_ruleMapping833);
            ruleQID();
            _fsp--;

             
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            match(input,20,FOLLOW_20_in_ruleMapping843); 

                    createLeafNode(grammarAccess.getMappingAccess().getLeftCurlyBracketKeyword_7(), null); 
                
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:465:1: ( ( (lv_mappedFeatures_10_0= ruleFeatureMap ) ) ( ';' )? )*
            loop9:
            do {
                int alt9=2;
                int LA9_0 = input.LA(1);

                if ( (LA9_0==23||LA9_0==25||(LA9_0>=27 && LA9_0<=29)) ) {
                    alt9=1;
                }


                switch (alt9) {
            	case 1 :
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:465:2: ( (lv_mappedFeatures_10_0= ruleFeatureMap ) ) ( ';' )?
            	    {
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:465:2: ( (lv_mappedFeatures_10_0= ruleFeatureMap ) )
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:466:1: (lv_mappedFeatures_10_0= ruleFeatureMap )
            	    {
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:466:1: (lv_mappedFeatures_10_0= ruleFeatureMap )
            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:467:3: lv_mappedFeatures_10_0= ruleFeatureMap
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getMappingAccess().getMappedFeaturesFeatureMapParserRuleCall_8_0_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleFeatureMap_in_ruleMapping865);
            	    lv_mappedFeatures_10_0=ruleFeatureMap();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getMappingRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"mappedFeatures",
            	    	        		lv_mappedFeatures_10_0, 
            	    	        		"FeatureMap", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }

            	    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:489:2: ( ';' )?
            	    int alt8=2;
            	    int LA8_0 = input.LA(1);

            	    if ( (LA8_0==21) ) {
            	        alt8=1;
            	    }
            	    switch (alt8) {
            	        case 1 :
            	            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:489:4: ';'
            	            {
            	            match(input,21,FOLLOW_21_in_ruleMapping876); 

            	                    createLeafNode(grammarAccess.getMappingAccess().getSemicolonKeyword_8_1(), null); 
            	                

            	            }
            	            break;

            	    }


            	    }
            	    break;

            	default :
            	    break loop9;
                }
            } while (true);

            match(input,22,FOLLOW_22_in_ruleMapping890); 

                    createLeafNode(grammarAccess.getMappingAccess().getRightCurlyBracketKeyword_9(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleMapping


    // $ANTLR start entryRuleFeatureMap
    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:505:1: entryRuleFeatureMap returns [EObject current=null] : iv_ruleFeatureMap= ruleFeatureMap EOF ;
    public final EObject entryRuleFeatureMap() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleFeatureMap = null;


        try {
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:506:2: (iv_ruleFeatureMap= ruleFeatureMap EOF )
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:507:2: iv_ruleFeatureMap= ruleFeatureMap EOF
            {
             currentNode = createCompositeNode(grammarAccess.getFeatureMapRule(), currentNode); 
            pushFollow(FOLLOW_ruleFeatureMap_in_entryRuleFeatureMap926);
            iv_ruleFeatureMap=ruleFeatureMap();
            _fsp--;

             current =iv_ruleFeatureMap; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleFeatureMap936); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleFeatureMap


    // $ANTLR start ruleFeatureMap
    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:514:1: ruleFeatureMap returns [EObject current=null] : ( ( 'map' ( ( RULE_ID ) ) '<=>' ( ( RULE_ID ) ) ) | ( 'left' '.' ( ( RULE_ID ) ) '=' ( (lv_expr_8_0= ruleExpression ) ) ) | ( 'right' '.' ( ( RULE_ID ) ) '=' ( (lv_expr_13_0= ruleExpression ) ) ) | ( 'composite' 'map' 'left' '.' ( ( RULE_ID ) ) ) | ( 'composite' 'map' 'right' '.' ( ( RULE_ID ) ) ) | ( 'ignore' 'left' '.' ( ( RULE_ID ) ) ) | ( 'ignore' 'right' '.' ( ( RULE_ID ) ) ) ) ;
    public final EObject ruleFeatureMap() throws RecognitionException {
        EObject current = null;

        EObject lv_expr_8_0 = null;

        EObject lv_expr_13_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:519:6: ( ( ( 'map' ( ( RULE_ID ) ) '<=>' ( ( RULE_ID ) ) ) | ( 'left' '.' ( ( RULE_ID ) ) '=' ( (lv_expr_8_0= ruleExpression ) ) ) | ( 'right' '.' ( ( RULE_ID ) ) '=' ( (lv_expr_13_0= ruleExpression ) ) ) | ( 'composite' 'map' 'left' '.' ( ( RULE_ID ) ) ) | ( 'composite' 'map' 'right' '.' ( ( RULE_ID ) ) ) | ( 'ignore' 'left' '.' ( ( RULE_ID ) ) ) | ( 'ignore' 'right' '.' ( ( RULE_ID ) ) ) ) )
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:520:1: ( ( 'map' ( ( RULE_ID ) ) '<=>' ( ( RULE_ID ) ) ) | ( 'left' '.' ( ( RULE_ID ) ) '=' ( (lv_expr_8_0= ruleExpression ) ) ) | ( 'right' '.' ( ( RULE_ID ) ) '=' ( (lv_expr_13_0= ruleExpression ) ) ) | ( 'composite' 'map' 'left' '.' ( ( RULE_ID ) ) ) | ( 'composite' 'map' 'right' '.' ( ( RULE_ID ) ) ) | ( 'ignore' 'left' '.' ( ( RULE_ID ) ) ) | ( 'ignore' 'right' '.' ( ( RULE_ID ) ) ) )
            {
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:520:1: ( ( 'map' ( ( RULE_ID ) ) '<=>' ( ( RULE_ID ) ) ) | ( 'left' '.' ( ( RULE_ID ) ) '=' ( (lv_expr_8_0= ruleExpression ) ) ) | ( 'right' '.' ( ( RULE_ID ) ) '=' ( (lv_expr_13_0= ruleExpression ) ) ) | ( 'composite' 'map' 'left' '.' ( ( RULE_ID ) ) ) | ( 'composite' 'map' 'right' '.' ( ( RULE_ID ) ) ) | ( 'ignore' 'left' '.' ( ( RULE_ID ) ) ) | ( 'ignore' 'right' '.' ( ( RULE_ID ) ) ) )
            int alt10=7;
            switch ( input.LA(1) ) {
            case 23:
                {
                alt10=1;
                }
                break;
            case 25:
                {
                alt10=2;
                }
                break;
            case 27:
                {
                alt10=3;
                }
                break;
            case 28:
                {
                int LA10_4 = input.LA(2);

                if ( (LA10_4==23) ) {
                    int LA10_6 = input.LA(3);

                    if ( (LA10_6==25) ) {
                        alt10=4;
                    }
                    else if ( (LA10_6==27) ) {
                        alt10=5;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("520:1: ( ( 'map' ( ( RULE_ID ) ) '<=>' ( ( RULE_ID ) ) ) | ( 'left' '.' ( ( RULE_ID ) ) '=' ( (lv_expr_8_0= ruleExpression ) ) ) | ( 'right' '.' ( ( RULE_ID ) ) '=' ( (lv_expr_13_0= ruleExpression ) ) ) | ( 'composite' 'map' 'left' '.' ( ( RULE_ID ) ) ) | ( 'composite' 'map' 'right' '.' ( ( RULE_ID ) ) ) | ( 'ignore' 'left' '.' ( ( RULE_ID ) ) ) | ( 'ignore' 'right' '.' ( ( RULE_ID ) ) ) )", 10, 6, input);

                        throw nvae;
                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("520:1: ( ( 'map' ( ( RULE_ID ) ) '<=>' ( ( RULE_ID ) ) ) | ( 'left' '.' ( ( RULE_ID ) ) '=' ( (lv_expr_8_0= ruleExpression ) ) ) | ( 'right' '.' ( ( RULE_ID ) ) '=' ( (lv_expr_13_0= ruleExpression ) ) ) | ( 'composite' 'map' 'left' '.' ( ( RULE_ID ) ) ) | ( 'composite' 'map' 'right' '.' ( ( RULE_ID ) ) ) | ( 'ignore' 'left' '.' ( ( RULE_ID ) ) ) | ( 'ignore' 'right' '.' ( ( RULE_ID ) ) ) )", 10, 4, input);

                    throw nvae;
                }
                }
                break;
            case 29:
                {
                int LA10_5 = input.LA(2);

                if ( (LA10_5==25) ) {
                    alt10=6;
                }
                else if ( (LA10_5==27) ) {
                    alt10=7;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("520:1: ( ( 'map' ( ( RULE_ID ) ) '<=>' ( ( RULE_ID ) ) ) | ( 'left' '.' ( ( RULE_ID ) ) '=' ( (lv_expr_8_0= ruleExpression ) ) ) | ( 'right' '.' ( ( RULE_ID ) ) '=' ( (lv_expr_13_0= ruleExpression ) ) ) | ( 'composite' 'map' 'left' '.' ( ( RULE_ID ) ) ) | ( 'composite' 'map' 'right' '.' ( ( RULE_ID ) ) ) | ( 'ignore' 'left' '.' ( ( RULE_ID ) ) ) | ( 'ignore' 'right' '.' ( ( RULE_ID ) ) ) )", 10, 5, input);

                    throw nvae;
                }
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("520:1: ( ( 'map' ( ( RULE_ID ) ) '<=>' ( ( RULE_ID ) ) ) | ( 'left' '.' ( ( RULE_ID ) ) '=' ( (lv_expr_8_0= ruleExpression ) ) ) | ( 'right' '.' ( ( RULE_ID ) ) '=' ( (lv_expr_13_0= ruleExpression ) ) ) | ( 'composite' 'map' 'left' '.' ( ( RULE_ID ) ) ) | ( 'composite' 'map' 'right' '.' ( ( RULE_ID ) ) ) | ( 'ignore' 'left' '.' ( ( RULE_ID ) ) ) | ( 'ignore' 'right' '.' ( ( RULE_ID ) ) ) )", 10, 0, input);

                throw nvae;
            }

            switch (alt10) {
                case 1 :
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:520:2: ( 'map' ( ( RULE_ID ) ) '<=>' ( ( RULE_ID ) ) )
                    {
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:520:2: ( 'map' ( ( RULE_ID ) ) '<=>' ( ( RULE_ID ) ) )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:520:4: 'map' ( ( RULE_ID ) ) '<=>' ( ( RULE_ID ) )
                    {
                    match(input,23,FOLLOW_23_in_ruleFeatureMap972); 

                            createLeafNode(grammarAccess.getFeatureMapAccess().getMapKeyword_0_0(), null); 
                        
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:524:1: ( ( RULE_ID ) )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:525:1: ( RULE_ID )
                    {
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:525:1: ( RULE_ID )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:526:3: RULE_ID
                    {

                    			if (current==null) {
                    	            current = factory.create(grammarAccess.getFeatureMapRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                            
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleFeatureMap990); 

                    		createLeafNode(grammarAccess.getFeatureMapAccess().getLeftFieldJvmFeatureCrossReference_0_1_0(), "leftField"); 
                    	

                    }


                    }

                    match(input,24,FOLLOW_24_in_ruleFeatureMap1000); 

                            createLeafNode(grammarAccess.getFeatureMapAccess().getLessThanSignEqualsSignGreaterThanSignKeyword_0_2(), null); 
                        
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:542:1: ( ( RULE_ID ) )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:543:1: ( RULE_ID )
                    {
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:543:1: ( RULE_ID )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:544:3: RULE_ID
                    {

                    			if (current==null) {
                    	            current = factory.create(grammarAccess.getFeatureMapRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                            
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleFeatureMap1018); 

                    		createLeafNode(grammarAccess.getFeatureMapAccess().getRightFieldJvmFeatureCrossReference_0_3_0(), "rightField"); 
                    	

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:557:6: ( 'left' '.' ( ( RULE_ID ) ) '=' ( (lv_expr_8_0= ruleExpression ) ) )
                    {
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:557:6: ( 'left' '.' ( ( RULE_ID ) ) '=' ( (lv_expr_8_0= ruleExpression ) ) )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:557:8: 'left' '.' ( ( RULE_ID ) ) '=' ( (lv_expr_8_0= ruleExpression ) )
                    {
                    match(input,25,FOLLOW_25_in_ruleFeatureMap1036); 

                            createLeafNode(grammarAccess.getFeatureMapAccess().getLeftKeyword_1_0(), null); 
                        
                    match(input,12,FOLLOW_12_in_ruleFeatureMap1046); 

                            createLeafNode(grammarAccess.getFeatureMapAccess().getFullStopKeyword_1_1(), null); 
                        
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:565:1: ( ( RULE_ID ) )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:566:1: ( RULE_ID )
                    {
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:566:1: ( RULE_ID )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:567:3: RULE_ID
                    {

                    			if (current==null) {
                    	            current = factory.create(grammarAccess.getFeatureMapRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                            
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleFeatureMap1064); 

                    		createLeafNode(grammarAccess.getFeatureMapAccess().getLeftFieldJvmFeatureCrossReference_1_2_0(), "leftField"); 
                    	

                    }


                    }

                    match(input,26,FOLLOW_26_in_ruleFeatureMap1074); 

                            createLeafNode(grammarAccess.getFeatureMapAccess().getEqualsSignKeyword_1_3(), null); 
                        
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:583:1: ( (lv_expr_8_0= ruleExpression ) )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:584:1: (lv_expr_8_0= ruleExpression )
                    {
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:584:1: (lv_expr_8_0= ruleExpression )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:585:3: lv_expr_8_0= ruleExpression
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getFeatureMapAccess().getExprExpressionParserRuleCall_1_4_0(), currentNode); 
                    	    
                    pushFollow(FOLLOW_ruleExpression_in_ruleFeatureMap1095);
                    lv_expr_8_0=ruleExpression();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getFeatureMapRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"expr",
                    	        		lv_expr_8_0, 
                    	        		"Expression", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }


                    }


                    }
                    break;
                case 3 :
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:608:6: ( 'right' '.' ( ( RULE_ID ) ) '=' ( (lv_expr_13_0= ruleExpression ) ) )
                    {
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:608:6: ( 'right' '.' ( ( RULE_ID ) ) '=' ( (lv_expr_13_0= ruleExpression ) ) )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:608:8: 'right' '.' ( ( RULE_ID ) ) '=' ( (lv_expr_13_0= ruleExpression ) )
                    {
                    match(input,27,FOLLOW_27_in_ruleFeatureMap1113); 

                            createLeafNode(grammarAccess.getFeatureMapAccess().getRightKeyword_2_0(), null); 
                        
                    match(input,12,FOLLOW_12_in_ruleFeatureMap1123); 

                            createLeafNode(grammarAccess.getFeatureMapAccess().getFullStopKeyword_2_1(), null); 
                        
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:616:1: ( ( RULE_ID ) )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:617:1: ( RULE_ID )
                    {
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:617:1: ( RULE_ID )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:618:3: RULE_ID
                    {

                    			if (current==null) {
                    	            current = factory.create(grammarAccess.getFeatureMapRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                            
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleFeatureMap1141); 

                    		createLeafNode(grammarAccess.getFeatureMapAccess().getRightFieldJvmFeatureCrossReference_2_2_0(), "rightField"); 
                    	

                    }


                    }

                    match(input,26,FOLLOW_26_in_ruleFeatureMap1151); 

                            createLeafNode(grammarAccess.getFeatureMapAccess().getEqualsSignKeyword_2_3(), null); 
                        
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:634:1: ( (lv_expr_13_0= ruleExpression ) )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:635:1: (lv_expr_13_0= ruleExpression )
                    {
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:635:1: (lv_expr_13_0= ruleExpression )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:636:3: lv_expr_13_0= ruleExpression
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getFeatureMapAccess().getExprExpressionParserRuleCall_2_4_0(), currentNode); 
                    	    
                    pushFollow(FOLLOW_ruleExpression_in_ruleFeatureMap1172);
                    lv_expr_13_0=ruleExpression();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getFeatureMapRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"expr",
                    	        		lv_expr_13_0, 
                    	        		"Expression", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }


                    }


                    }
                    break;
                case 4 :
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:659:6: ( 'composite' 'map' 'left' '.' ( ( RULE_ID ) ) )
                    {
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:659:6: ( 'composite' 'map' 'left' '.' ( ( RULE_ID ) ) )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:659:8: 'composite' 'map' 'left' '.' ( ( RULE_ID ) )
                    {
                    match(input,28,FOLLOW_28_in_ruleFeatureMap1190); 

                            createLeafNode(grammarAccess.getFeatureMapAccess().getCompositeKeyword_3_0(), null); 
                        
                    match(input,23,FOLLOW_23_in_ruleFeatureMap1200); 

                            createLeafNode(grammarAccess.getFeatureMapAccess().getMapKeyword_3_1(), null); 
                        
                    match(input,25,FOLLOW_25_in_ruleFeatureMap1210); 

                            createLeafNode(grammarAccess.getFeatureMapAccess().getLeftKeyword_3_2(), null); 
                        
                    match(input,12,FOLLOW_12_in_ruleFeatureMap1220); 

                            createLeafNode(grammarAccess.getFeatureMapAccess().getFullStopKeyword_3_3(), null); 
                        
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:675:1: ( ( RULE_ID ) )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:676:1: ( RULE_ID )
                    {
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:676:1: ( RULE_ID )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:677:3: RULE_ID
                    {

                    			if (current==null) {
                    	            current = factory.create(grammarAccess.getFeatureMapRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                            
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleFeatureMap1238); 

                    		createLeafNode(grammarAccess.getFeatureMapAccess().getLeftFieldJvmFeatureCrossReference_3_4_0(), "leftField"); 
                    	

                    }


                    }


                    }


                    }
                    break;
                case 5 :
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:690:6: ( 'composite' 'map' 'right' '.' ( ( RULE_ID ) ) )
                    {
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:690:6: ( 'composite' 'map' 'right' '.' ( ( RULE_ID ) ) )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:690:8: 'composite' 'map' 'right' '.' ( ( RULE_ID ) )
                    {
                    match(input,28,FOLLOW_28_in_ruleFeatureMap1256); 

                            createLeafNode(grammarAccess.getFeatureMapAccess().getCompositeKeyword_4_0(), null); 
                        
                    match(input,23,FOLLOW_23_in_ruleFeatureMap1266); 

                            createLeafNode(grammarAccess.getFeatureMapAccess().getMapKeyword_4_1(), null); 
                        
                    match(input,27,FOLLOW_27_in_ruleFeatureMap1276); 

                            createLeafNode(grammarAccess.getFeatureMapAccess().getRightKeyword_4_2(), null); 
                        
                    match(input,12,FOLLOW_12_in_ruleFeatureMap1286); 

                            createLeafNode(grammarAccess.getFeatureMapAccess().getFullStopKeyword_4_3(), null); 
                        
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:706:1: ( ( RULE_ID ) )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:707:1: ( RULE_ID )
                    {
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:707:1: ( RULE_ID )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:708:3: RULE_ID
                    {

                    			if (current==null) {
                    	            current = factory.create(grammarAccess.getFeatureMapRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                            
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleFeatureMap1304); 

                    		createLeafNode(grammarAccess.getFeatureMapAccess().getRightFieldJvmFeatureCrossReference_4_4_0(), "rightField"); 
                    	

                    }


                    }


                    }


                    }
                    break;
                case 6 :
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:721:6: ( 'ignore' 'left' '.' ( ( RULE_ID ) ) )
                    {
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:721:6: ( 'ignore' 'left' '.' ( ( RULE_ID ) ) )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:721:8: 'ignore' 'left' '.' ( ( RULE_ID ) )
                    {
                    match(input,29,FOLLOW_29_in_ruleFeatureMap1322); 

                            createLeafNode(grammarAccess.getFeatureMapAccess().getIgnoreKeyword_5_0(), null); 
                        
                    match(input,25,FOLLOW_25_in_ruleFeatureMap1332); 

                            createLeafNode(grammarAccess.getFeatureMapAccess().getLeftKeyword_5_1(), null); 
                        
                    match(input,12,FOLLOW_12_in_ruleFeatureMap1342); 

                            createLeafNode(grammarAccess.getFeatureMapAccess().getFullStopKeyword_5_2(), null); 
                        
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:733:1: ( ( RULE_ID ) )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:734:1: ( RULE_ID )
                    {
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:734:1: ( RULE_ID )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:735:3: RULE_ID
                    {

                    			if (current==null) {
                    	            current = factory.create(grammarAccess.getFeatureMapRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                            
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleFeatureMap1360); 

                    		createLeafNode(grammarAccess.getFeatureMapAccess().getLeftFieldJvmFeatureCrossReference_5_3_0(), "leftField"); 
                    	

                    }


                    }


                    }


                    }
                    break;
                case 7 :
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:748:6: ( 'ignore' 'right' '.' ( ( RULE_ID ) ) )
                    {
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:748:6: ( 'ignore' 'right' '.' ( ( RULE_ID ) ) )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:748:8: 'ignore' 'right' '.' ( ( RULE_ID ) )
                    {
                    match(input,29,FOLLOW_29_in_ruleFeatureMap1378); 

                            createLeafNode(grammarAccess.getFeatureMapAccess().getIgnoreKeyword_6_0(), null); 
                        
                    match(input,27,FOLLOW_27_in_ruleFeatureMap1388); 

                            createLeafNode(grammarAccess.getFeatureMapAccess().getRightKeyword_6_1(), null); 
                        
                    match(input,12,FOLLOW_12_in_ruleFeatureMap1398); 

                            createLeafNode(grammarAccess.getFeatureMapAccess().getFullStopKeyword_6_2(), null); 
                        
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:760:1: ( ( RULE_ID ) )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:761:1: ( RULE_ID )
                    {
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:761:1: ( RULE_ID )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:762:3: RULE_ID
                    {

                    			if (current==null) {
                    	            current = factory.create(grammarAccess.getFeatureMapRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                            
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleFeatureMap1416); 

                    		createLeafNode(grammarAccess.getFeatureMapAccess().getRightFieldJvmFeatureCrossReference_6_3_0(), "rightField"); 
                    	

                    }


                    }


                    }


                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleFeatureMap


    // $ANTLR start entryRuleExpression
    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:784:1: entryRuleExpression returns [EObject current=null] : iv_ruleExpression= ruleExpression EOF ;
    public final EObject entryRuleExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleExpression = null;


        try {
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:785:2: (iv_ruleExpression= ruleExpression EOF )
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:786:2: iv_ruleExpression= ruleExpression EOF
            {
             currentNode = createCompositeNode(grammarAccess.getExpressionRule(), currentNode); 
            pushFollow(FOLLOW_ruleExpression_in_entryRuleExpression1455);
            iv_ruleExpression=ruleExpression();
            _fsp--;

             current =iv_ruleExpression; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleExpression1465); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleExpression


    // $ANTLR start ruleExpression
    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:793:1: ruleExpression returns [EObject current=null] : ( ( (lv_value_0_0= RULE_STRING ) ) | ( (lv_intValue_1_0= RULE_INT ) ) ) ;
    public final EObject ruleExpression() throws RecognitionException {
        EObject current = null;

        Token lv_value_0_0=null;
        Token lv_intValue_1_0=null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:798:6: ( ( ( (lv_value_0_0= RULE_STRING ) ) | ( (lv_intValue_1_0= RULE_INT ) ) ) )
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:799:1: ( ( (lv_value_0_0= RULE_STRING ) ) | ( (lv_intValue_1_0= RULE_INT ) ) )
            {
            // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:799:1: ( ( (lv_value_0_0= RULE_STRING ) ) | ( (lv_intValue_1_0= RULE_INT ) ) )
            int alt11=2;
            int LA11_0 = input.LA(1);

            if ( (LA11_0==RULE_STRING) ) {
                alt11=1;
            }
            else if ( (LA11_0==RULE_INT) ) {
                alt11=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("799:1: ( ( (lv_value_0_0= RULE_STRING ) ) | ( (lv_intValue_1_0= RULE_INT ) ) )", 11, 0, input);

                throw nvae;
            }
            switch (alt11) {
                case 1 :
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:799:2: ( (lv_value_0_0= RULE_STRING ) )
                    {
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:799:2: ( (lv_value_0_0= RULE_STRING ) )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:800:1: (lv_value_0_0= RULE_STRING )
                    {
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:800:1: (lv_value_0_0= RULE_STRING )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:801:3: lv_value_0_0= RULE_STRING
                    {
                    lv_value_0_0=(Token)input.LT(1);
                    match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleExpression1507); 

                    			createLeafNode(grammarAccess.getExpressionAccess().getValueSTRINGTerminalRuleCall_0_0(), "value"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getExpressionRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"value",
                    	        		lv_value_0_0, 
                    	        		"STRING", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }


                    }
                    break;
                case 2 :
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:824:6: ( (lv_intValue_1_0= RULE_INT ) )
                    {
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:824:6: ( (lv_intValue_1_0= RULE_INT ) )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:825:1: (lv_intValue_1_0= RULE_INT )
                    {
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:825:1: (lv_intValue_1_0= RULE_INT )
                    // ../dk.nineconsult.jmoller.mapr/src-gen/dk/nineconsult/jmoller/mapr/parser/antlr/internal/InternalMapr.g:826:3: lv_intValue_1_0= RULE_INT
                    {
                    lv_intValue_1_0=(Token)input.LT(1);
                    match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleExpression1535); 

                    			createLeafNode(grammarAccess.getExpressionAccess().getIntValueINTTerminalRuleCall_1_0(), "intValue"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getExpressionRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"intValue",
                    	        		lv_intValue_1_0, 
                    	        		"INT", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }


                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleExpression


 

    public static final BitSet FOLLOW_ruleModel_in_entryRuleModel75 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleModel85 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMappingModule_in_ruleModel130 = new BitSet(new long[]{0x0000000000000802L});
    public static final BitSet FOLLOW_ruleMappingModule_in_entryRuleMappingModule166 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleMappingModule176 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_11_in_ruleMappingModule220 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleQID_in_ruleMappingModule241 = new BitSet(new long[]{0x000000000001E002L});
    public static final BitSet FOLLOW_ruleMapping_in_ruleMappingModule262 = new BitSet(new long[]{0x000000000001E002L});
    public static final BitSet FOLLOW_ruleQID_in_entryRuleQID300 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleQID311 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleQID351 = new BitSet(new long[]{0x0000000000001002L});
    public static final BitSet FOLLOW_12_in_ruleQID370 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleQID385 = new BitSet(new long[]{0x0000000000001002L});
    public static final BitSet FOLLOW_ruleMapping_in_entryRuleMapping432 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleMapping442 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_13_in_ruleMapping529 = new BitSet(new long[]{0x000000000003E000L});
    public static final BitSet FOLLOW_14_in_ruleMapping558 = new BitSet(new long[]{0x000000000003E000L});
    public static final BitSet FOLLOW_15_in_ruleMapping644 = new BitSet(new long[]{0x000000000003E000L});
    public static final BitSet FOLLOW_16_in_ruleMapping673 = new BitSet(new long[]{0x000000000003E000L});
    public static final BitSet FOLLOW_17_in_ruleMapping744 = new BitSet(new long[]{0x0000000000040020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleMapping761 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleMapping777 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleQID_in_ruleMapping800 = new BitSet(new long[]{0x0000000000080000L});
    public static final BitSet FOLLOW_19_in_ruleMapping810 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleQID_in_ruleMapping833 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_20_in_ruleMapping843 = new BitSet(new long[]{0x000000003AC00000L});
    public static final BitSet FOLLOW_ruleFeatureMap_in_ruleMapping865 = new BitSet(new long[]{0x000000003AE00000L});
    public static final BitSet FOLLOW_21_in_ruleMapping876 = new BitSet(new long[]{0x000000003AC00000L});
    public static final BitSet FOLLOW_22_in_ruleMapping890 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleFeatureMap_in_entryRuleFeatureMap926 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleFeatureMap936 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_23_in_ruleFeatureMap972 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleFeatureMap990 = new BitSet(new long[]{0x0000000001000000L});
    public static final BitSet FOLLOW_24_in_ruleFeatureMap1000 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleFeatureMap1018 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_25_in_ruleFeatureMap1036 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleFeatureMap1046 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleFeatureMap1064 = new BitSet(new long[]{0x0000000004000000L});
    public static final BitSet FOLLOW_26_in_ruleFeatureMap1074 = new BitSet(new long[]{0x0000000000000060L});
    public static final BitSet FOLLOW_ruleExpression_in_ruleFeatureMap1095 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_27_in_ruleFeatureMap1113 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleFeatureMap1123 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleFeatureMap1141 = new BitSet(new long[]{0x0000000004000000L});
    public static final BitSet FOLLOW_26_in_ruleFeatureMap1151 = new BitSet(new long[]{0x0000000000000060L});
    public static final BitSet FOLLOW_ruleExpression_in_ruleFeatureMap1172 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_28_in_ruleFeatureMap1190 = new BitSet(new long[]{0x0000000000800000L});
    public static final BitSet FOLLOW_23_in_ruleFeatureMap1200 = new BitSet(new long[]{0x0000000002000000L});
    public static final BitSet FOLLOW_25_in_ruleFeatureMap1210 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleFeatureMap1220 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleFeatureMap1238 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_28_in_ruleFeatureMap1256 = new BitSet(new long[]{0x0000000000800000L});
    public static final BitSet FOLLOW_23_in_ruleFeatureMap1266 = new BitSet(new long[]{0x0000000008000000L});
    public static final BitSet FOLLOW_27_in_ruleFeatureMap1276 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleFeatureMap1286 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleFeatureMap1304 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_29_in_ruleFeatureMap1322 = new BitSet(new long[]{0x0000000002000000L});
    public static final BitSet FOLLOW_25_in_ruleFeatureMap1332 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleFeatureMap1342 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleFeatureMap1360 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_29_in_ruleFeatureMap1378 = new BitSet(new long[]{0x0000000008000000L});
    public static final BitSet FOLLOW_27_in_ruleFeatureMap1388 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleFeatureMap1398 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleFeatureMap1416 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleExpression_in_entryRuleExpression1455 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleExpression1465 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleExpression1507 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_INT_in_ruleExpression1535 = new BitSet(new long[]{0x0000000000000002L});

}
